<?php
/** @name : Exception.php - @author : theerasak.p - @since : 21 �.�. 2554 1:17:47 - @encoding : UTF-8 */
class WebException extends Exception
{
	/**
	 * @method จัดข้อความเพื่อใช้แสดงกรณีเกิด Exception 
	 * @param line = ปัญหาเกิดขึ้นจากบรรทัดที่เท่าใด, file = ไฟล์ที่เกิดปัญหา, message = ข้อความเพื่อแสดงรายละเอียดปัญหา
	 * @return ไม่มี
	 * @example WebException::message($this->getLine(), $this->getFile(), $this->getMessage());
	 */
	public static function message($line,$file,$message)
	{
		//error message
		$msg = "<b>ปัญหาที่เกิดขึ้น</b> : ".$message."<br/>";
		$msg .= "<b>ส่งคำสั่ง Error มาจาก</b><br/>:- ".$file." : line ".$line;
		return $msg;
	}

	/**
	 * @method แสดง Exception กรณีเกิดปัญหา 
	 * @param type = ชนิดของปัญหา, message = ข้อความที่ต้องการแสดง
	 * @return ไม่มี
	 * @example WebException::go(MSG_ERR_MODEL_ERROR, WebException::message($this->getLine(), $this->getFile(), $this->getMessage()));
	 */
	public static function go($type,$message)
	{
		Session::set("errorType", $type);
		Session::set("errorMessage", $message);
		echo "<html><head><script language=\"javascript\" src=\"".PUBLIC_SYSTEM_SITE."/jscripts/jquery.min.js\"></script>";
		echo "<script language=\"javascript\">";
		echo "	$(document).ready(function() {";
		echo "		$('html').load('http://".$_SERVER['HTTP_HOST'].((Config::$subFolder)?Config::$subFolder:"")."/exception');";
		echo "	});";
		echo "</script></head><body></body></html>";
		exit();
	}
}

class ModelException extends Exception
{
	public function execute()
	{
		WebException::go(MSG_ERR_MODEL_ERROR, WebException::message($this->getLine(), $this->getFile(), $this->getMessage()));
	}
}

class DatabaseException extends Exception
{
	public function execute()
	{
		WebException::go(MSG_ERR_DATABASE_ERROR, WebException::message($this->getLine(), $this->getFile(), $this->getMessage()));
	}
}

class PageNotFoundException extends Exception
{
	public function execute()
	{
		WebException::go(MSG_ERR_PAGE_NOTFOUND, WebException::message($this->getLine(), $this->getFile(), $this->getMessage()));
	}
}

class InstallException extends Exception
{
	public function execute()
	{
		WebException::go(MSG_ERR_INSTALL_ERROR, WebException::message($this->getLine(), $this->getFile(), $this->getMessage()));
	}
}

class PHPException extends Exception
{
	public function execute()
	{
		WebException::go(MSG_ERR_PHP_ERROR, WebException::message($this->getLine(), $this->getFile(), $this->getMessage()));
	}
}

function errorHandler()
{
	$isError = false;
	if ($error = error_get_last()){
		switch($error['type']){
			case E_ERROR:
			case E_CORE_ERROR:
			case E_COMPILE_ERROR:
			case E_USER_ERROR:
				$isError = true;
				break;
		}
	}

	if ($isError){
		try
		{
			throw new PHPException("ระบบเกิดความผิดพลาดจากโค๊ด PHP <br/><br/><b>".MSG_SYSTEM_MESSAGE."</b><br/>:- {$error['message']} <br/><br/><b>ไฟล์ที่เกิดปัญหา</b><br/>:- {$error['file']} : line {$error['line']}<br/>");
		}
		catch (PHPException $e)
		{
			$e->execute();
		}

	}
}

register_shutdown_function('errorHandler');

?>
